package com.suneee.base.util;

/**
 * 利用当前时间 ， 产生一个16位长度的 UUID,本方法有个假设条件：
 * 机器的运算(调用本方法)速度每毫秒不超过 16^5-1 (约104万次) 次 ，一般的系统不会超过这个频度。
 * 用法： Uuid.getUuid() 即可得到一个 16个字符的 UUID 
 * @author benyi
 * @version 0.01
 * @see jdk 本身也提供了一个产生 UUID 的类。
 */
public class Uuid {
	private static long current=System.currentTimeMillis(); 
	private static long child=0; 
	
	public synchronized static String getUuid(){
		long v=System.currentTimeMillis();
		if(v-current!=0){
			current=v;
			child=0;
		}else{
			child++;
		} 
		return create(current,child);
	}
	
	private static String create(long v1,long v2){ 
		String h1=Long.toHexString(v1);
		String h2=Long.toHexString(v2);
		StringBuilder sb=new StringBuilder();
		sb.append(h1); 
		int len=5-h2.length();
		while(len>0){
			sb.append("0");
			len--;
		}
		sb.append(h2); 
		String v=sb.toString();
		sb=null;
		return v;
	}
	
	public static void main(String []args){  
		StringBuilder s=new StringBuilder();
		long l=System.currentTimeMillis();
		for(int i=0;i<10000;i++){ 
			s.append(i);
			s.append("\t");
			s.append(getUuid());
			s.append("\r\n");
		}
		l=System.currentTimeMillis()-l;
		System.out.println(s.toString());
		System.out.println("Time="+l);
	}
}
